/**
* @version $Id: ImportCoronaProjectWizardPage.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $
*
* 2012/02/02 17:01:09
* @author miyaguni
*
* Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved.
*/
package com.tida_okinawa.corona.ui.wizards;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import com.tida_okinawa.corona.internal.ui.component.CompositeUtil;
import com.tida_okinawa.corona.internal.ui.util.ValidateUtil;
import com.tida_okinawa.corona.io.IoActivator;
import com.tida_okinawa.corona.io.model.ICoronaProject;
/**
* DB登録済みプロジェクトのインポートウィザードクラス
*
* @author miyaguni
*/
public class ImportCoronaProjectWizardPage extends WizardPageBase {
private IStructuredSelection selectedProjectList;
protected ImportCoronaProjectWizardPage(String pageName) {
super(pageName);
setTitle(Messages.ImportCoronaProjectWizardPage_titleImportProject);
setDescription(Messages.ImportCoronaProjectWizardPage_descriptionImportProject);
}
@Override
public void createControl(Composite parent) {
Composite composite = CompositeUtil.defaultComposite(parent, 1);
Composite projectGroup = CompositeUtil.defaultComposite(composite, 1);
((GridData) projectGroup.getLayoutData()).grabExcessVerticalSpace = true;
((GridData) projectGroup.getLayoutData()).grabExcessHorizontalSpace = true;
createProjectGroup(projectGroup);
setSelectedProjectList(null);
setControl(composite);
setPageComplete(fieldValidate());
}
/**
* DB登録済みプロジェクト一覧を表示する Composite を作成する
*
* @param parent
*/
private void createProjectGroup(Composite parent) {
Composite composite = CompositeUtil.defaultComposite(parent, 1);
Label l = new Label(composite, SWT.NONE);
l.setText(Messages.ImportCoronaProjectWizardPage_compImportableProjectList);
TableViewer projectListViewer = new TableViewer(composite, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
projectListViewer.setContentProvider(new ArrayContentProvider());
projectListViewer.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
if (element instanceof ICoronaProject) {
return ((ICoronaProject) element).getName();
}
return super.getText(element);
}
});
projectListViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
setSelectedProjectList((IStructuredSelection) event.getSelection());
setPageComplete(fieldValidate());
}
});
projectListViewer.setInput(existingProjectList());
Table t = projectListViewer.getTable();
TableColumn col = new TableColumn(t, SWT.NONE);
col.pack();
if (col.getWidth() < 300) {
col.setWidth(300);
}
t.setLayout(new GridLayout());
t.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
}
/**
* バリデーションチェック
*
* <pre>
* 1. DB に登録済みのプロジェクトがない
* 2. プロジェクトが未選択
* </pre>
*
* @return エラーが無ければ true 、あれば false
*/
boolean fieldValidate() {
if (existingProjectList().isEmpty()) {
setErrorMessage(Messages.ImportCoronaProjectWizardPage_errorMessageNotImportableProject);
return false;
}
IStructuredSelection selection = getSelectedProjectList();
if (selection == null || selection.isEmpty()) {
return false;
}
setErrorMessage(null);
return true;
}
/**
* インポート可能なプロジェクトリストを返す
* <p>
* ワークスペースに存在するプロジェクトは除外する
*
* @return プロジェクトリスト
*/
private static List<ICoronaProject> existingProjectList() {
List<ICoronaProject> list = IoActivator.getService().getProjects();
List<ICoronaProject> projects = new ArrayList<ICoronaProject>();
for (ICoronaProject p : list) {
if ((ValidateUtil.DUPLICATE_WS & ValidateUtil.isValidProjectName(p.getName())) == 0) {
projects.add(p);
}
}
return projects;
}
@Override
public void setFocus() {
// TODO 自動生成されたメソッド・スタブ
}
/**
* @param selectedProject
* セットする selectedProject
*/
void setSelectedProjectList(IStructuredSelection selection) {
this.selectedProjectList = selection;
}
/**
* @return selectedProject
*/
public IStructuredSelection getSelectedProjectList() {
return selectedProjectList;
}
}